Apache Commons IO লাইব্রেরি ফাইল এবং ডিরেক্টরি সম্পর্কিত কাজ সহজ এবং কার্যকরী করার জন্য অনেক শক্তিশালী ক্লাস সরবরাহ করে। এর মধ্যে দুটি গুরুত্বপূর্ণ কার্যাবলী হলো Filename Normalization এবং Path Matching। এগুলি ফাইল সিস্টেমে পাথের সঠিক এবং সামঞ্জস্যপূর্ণ ব্যবস্থাপনা নিশ্চিত করতে সহায়ক।
ফাইল নামের Normalization হল একটি প্রক্রিয়া যা ফাইল পাথের ফরম্যাটকে একটি নির্দিষ্ট স্ট্যান্ডার্ডে নিয়ে আসে। এটি বিভিন্ন ফাইল সিস্টেমের মধ্যে পার্থক্য (যেমন, Windows এবং Unix পাথের মধ্যে) দূর করে এবং relative paths এবং absolute paths এর মধ্যে সামঞ্জস্য নিশ্চিত করে।
FilenameUtils.normalize() মেথডটি ফাইল পাথকে নরমালাইজ করে, যেখানে relative paths, parent directories, এবং directory separators সঠিকভাবে সামঞ্জস্য করা হয়।
উদাহরণ: Filename Normalization
import org.apache.commons.io.FilenameUtils;
public class FilenameNormalizationExample {
public static void main(String[] args) {
String filePath = "C:\\Users\\John\\Documents\\..\\Desktop\\file.txt";
// Filename normalization
String normalizedPath = FilenameUtils.normalize(filePath);
System.out.println("Normalized Path: " + normalizedPath);
}
}
এখানে:
আউটপুট:
Normalized Path: C:\Users\John\Desktop\file.txt
এটি দেখায় কিভাবে normalize() মেথড "..\" এর মতো অবাঞ্ছিত অংশগুলো সরিয়ে সঠিক পাথ প্রদান করে।
Path Matching হল একটি প্রক্রিয়া যেখানে পাথের সাথে মেলানো বা তুলনা করা হয়, বিশেষত wildcards এর মাধ্যমে। এটি প্রধানত ফাইল সিস্টেমের মধ্যে ডিরেক্টরি বা ফাইল খুঁজতে বা ফিল্টার করতে ব্যবহৃত হয়।
Apache Commons IO Path Matching এর জন্য FilenameUtils ক্লাসের মধ্যে বিভিন্ন ইউটিলিটি মেথড সরবরাহ করে, যেমন wildcard matching এবং পাথের তুলনা।
import org.apache.commons.io.FilenameUtils;
public class PathMatchingExample {
public static void main(String[] args) {
String filePath = "C:\\Users\\John\\Documents\\file.txt";
// Wildcard matching to check if the file path ends with .txt
boolean isMatch = FilenameUtils.wildcardMatch(filePath, "*.txt");
System.out.println("Does the file match the pattern? " + isMatch); // Output: true
}
}
এখানে:
আউটপুট:
Does the file match the pattern? true
import org.apache.commons.io.FilenameUtils;
public class PathMatchingSystemExample {
public static void main(String[] args) {
String filePath = "C:/Users/John/Documents/file.txt";
// Matching using system-specific separator
boolean isMatch = FilenameUtils.wildcardMatchOnSystem(filePath, "*/*/*/file.txt");
System.out.println("Does the file match the pattern? " + isMatch); // Output: true
}
}
এখানে:
আউটপুট:
Does the file match the pattern? true
এছাড়া, DirectoryWalker ক্লাসও path matching এর জন্য ব্যবহৃত হতে পারে, যেখানে আপনি একটি ডিরেক্টরি এবং তার অন্তর্গত ফাইলগুলো রিকার্সিভভাবে সার্চ করতে পারেন এবং সেগুলোকে একটি wildcard প্যাটার্নের সাথে তুলনা করতে পারেন।
import org.apache.commons.io.DirectoryWalker;
import org.apache.commons.io.filefilter.WildcardFileFilter;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class DirectoryWalkerExample extends DirectoryWalker {
public static void main(String[] args) throws IOException {
File directory = new File("path/to/directory");
// Using DirectoryWalker to traverse the directory and match files with a wildcard
DirectoryWalker walker = new DirectoryWalker() {
@Override
protected boolean handleFile(File file, int depth, List<File> results) {
if (file.getName().endsWith(".txt")) {
System.out.println("Found .txt file: " + file.getName());
}
return true;
}
};
walker.walk(directory, null);
}
}
এখানে:
Apache Commons IO লাইব্রেরির Filename Normalization এবং Path Matching ফিচারগুলো ফাইল সিস্টেমে পাথের ব্যবস্থাপনা সহজ এবং কার্যকরী করে তোলে। FilenameUtils.normalize() মেথডটি ফাইল পাথ নরমালাইজ করে, যা ডিরেক্টরি সেপারেটর এবং relative/absolute paths এর মধ্যে পার্থক্য দূর করে। wildcardMatch() এবং wildcardMatchOnSystem() মেথডগুলি পাথের সাথে মেলানো এবং wildcard matching এর জন্য ব্যবহৃত হয়। এগুলি ফাইল এবং ডিরেক্টরি সিস্টেমে কাজ করার সময় ডেভেলপারদের জন্য পারফেক্ট টুল।